package ru.averta.notes.domain.ajax;

import ru.averta.notes.domain.CoolMark;
import ru.averta.notes.domain.Tag;

import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * <code>AjaxUrlInfoAnswer</code>
 *
 * Ajax ответ на запрос "Информация по урлу"
 *
 * @author fedor.belov (fedor.belov@mail.ru)
 *         Date: 10.09.11 1:36
 */
public class AjaxUrlInfoAnswer {

    /** url, по которому возвращается информация */
    private String url;
    /** существует ли данный url в системе */
    private boolean isAdded;
    /** заголовок (если url добавлен в систему) */
    private String title;
    /** теги (если url добавлен в систему) */
    private AjaxTagContentListAnswer tags = new AjaxTagContentListAnswer();
    /** оценки (если url добавлен в систему) */
    private Set<AjaxCoolMark> marks = new HashSet<AjaxCoolMark>();

    public static AjaxUrlInfoAnswer getNotFoundInstance(String url) {
        return new AjaxUrlInfoAnswer(url, false, null, null, null);
    }

    public static AjaxUrlInfoAnswer getOkInstance(String url, String title, List<Tag> tags, Collection<CoolMark> marks) {
        return new AjaxUrlInfoAnswer(url, title, tags, marks);
    }

    public AjaxUrlInfoAnswer(String url, boolean added, String title, AjaxTagContentListAnswer tags, Set<AjaxCoolMark> marks) {
        this.url = url;
        isAdded = added;
        this.title = title;
        this.tags = tags;
        this.marks = marks;
    }

    /** Конструктор для построения ответа из объекта Site */
    private AjaxUrlInfoAnswer(String url, String title, List<Tag> tags, Collection<CoolMark> marks) {
        this.url = url;
        isAdded = true;
        this.title = title;
        if (tags != null) for (Tag tag : tags) this.tags.addTag(tag.getTitle());
        if (marks != null) for (CoolMark mark : marks) this.marks.add(mark.getAjaxObject());
    }

    /*public void addTag(String tag) {
        tags.addTag(tag);
    }

    public void addMark(AjaxCoolMark mark) {
        marks.add(mark);
    }

    *//* OPTIONAL SETTERS *//*
    public void setTags(AjaxTagContentListAnswer tags) {
        this.tags = tags;
    }

    public void setMarks(Set<AjaxCoolMark> marks) {
        this.marks = marks;
    }*/

    /* GETTERS */
    public String getUrl() {
        return url;
    }

    public boolean isAdded() {
        return isAdded;
    }

    public String getTitle() {
        return title;
    }

    public List<String> getTags() {
        return (tags == null) ? null : tags.getTags();
    }

    public Set<AjaxCoolMark> getMarks() {
        return marks;
    }
}
